/* 
 * File:   LogSystem.h
 * Author: Gab'z
 *
 * Created on 2 mai 2012, 23:21
 */

#ifndef LOGSYSTEM_H
#define	LOGSYSTEM_H

#include <string>
#include "LoggerManager.h"
#include "LogMessage.h"

namespace calculator {

    /**
     * Classe centrale du système de journalisation.
     * Définit les niveaux possible de logMessage.
     * Cette classe est chargée de publier les LogMessage dans la console et
     * un fichier calculatrice.log (voir .cpp).
     */
    class LogSystem {
    public:

        /**
         * Transmet un LogMessage aux différentes sorties.
         * @param message ue message à publier.
         */
        static void log(const LogMessage& message);

        /**
         * Niveau de log le plus bas, simple information.
         */
        static int TRACE;

        /**
         * Niveau de log intermédiaire, pour les points un peu compliqués du code.
         */
        static int DEBUG;

        /**
         * Niiveau de log le plus haut, pour les erreurs d'exécution.
         */
        static int ERROR;

    private:

        /**
         * Nom du fichier de destination.
         */
        static std::string destination;

        /**
         * Ajoute une entrée au fichier de journalisation.
         * @param message un message à journaliser.
         */
        static void logToFile(const std::string& message);

        /**
         * Ajoute une entrée à la console.
         * @param message un message à journaliser.
         */
        static void logToConsole(const std::string& message);

        /**
         * Ajoute une entrée en rouge à la console.
         * @param message un message à journaliser.
         */
        static void logErrorToConsole(const std::string& message);

        /**.
         * Contructeur de LogSystem
         * Associé automatiquement à un LoggerManager.
         * Le LoggerManager n'est crée que si on le sollicite.
         */
        LogSystem();

        
        /**
         * Destructeur de LogSystem.
         * Se charge de detruire le LoggerManager si nécessaire.
         */
        virtual ~LogSystem();
    };
}
#endif	/* LOGSYSTEM_H */
